/*
    拓扑排序的扩展技巧

    前置知识 : 
    讲解041-同余原理
    讲解059~讲解065都是【必备】课程有关图的内容，建议从头开始学习

    本节课继续讲解拓扑排序的题目

    重要技巧：利用拓扑排序的过程，上游节点逐渐推送消息给下游节点的技巧

    注意：
    这个技巧已经是树型dp的内容了，不过即便不会动态规划，本节课也能听懂
    动态规划专题（包括树型dp）会在后续【必备】课程里讲述

    ================================================

    题目1
    最大食物链计数
    a -> b，代表a在食物链中被b捕食
    给定一个有向无环图，返回
    这个图中从最初级动物到最顶级捕食者的食物链有几条
    测试链接 : https://www.luogu.com.cn/problem/P4017

    注意：本题答案很大，需要取模，不了解的同学看一下，讲解041-同余原理

    ================================================

    题目2
    喧闹和富有
    从 0 到 n - 1 编号，其中每个人都有不同数目的钱，以及不同程度的安静值
    给你一个数组richer，其中richer[i] = [ai, bi] 表示 
    person ai 比 person bi 更有钱
    还有一个整数数组 quiet ，其中 quiet[i] 是 person i 的安静值
    richer 中所给出的数据 逻辑自洽
    也就是说，在 person x 比 person y 更有钱的同时，不会出现
    person y 比 person x 更有钱的情况
    现在，返回一个整数数组 answer 作为答案，其中 answer[x] = y 的前提是,
    在所有拥有的钱 肯定不少于 person x 的人中，
    person y 是最安静的人（也就是安静值 quiet[y] 最小的人）。
    测试链接 : https://leetcode.cn/problems/loud-and-rich/

    ================================================

    题目3
    并行课程 III
    给你一个整数 n ，表示有 n 节课，课程编号从 1 到 n
    同时给你一个二维整数数组 relations ，
    其中 relations[j] = [prevCoursej, nextCoursej]
    表示课程 prevCoursej 必须在课程 nextCoursej 之前 完成（先修课的关系）
    同时给你一个下标从 0 开始的整数数组 time
    其中 time[i] 表示完成第 (i+1) 门课程需要花费的 月份 数。
    请你根据以下规则算出完成所有课程所需要的 最少 月份数：
    如果一门课的所有先修课都已经完成，你可以在 任意 时间开始这门课程。
    你可以 同时 上 任意门课程 。请你返回完成所有课程所需要的 最少 月份数。
    注意：测试数据保证一定可以完成所有课程（也就是先修课的关系构成一个有向无环图）
    测试链接 : https://leetcode.cn/problems/parallel-courses-iii/

    ================================================

    题目4
    参加会议的最多员工数
    一个公司准备组织一场会议，邀请名单上有 n 位员工
    公司准备了一张 圆形 的桌子，可以坐下 任意数目 的员工
    员工编号为 0 到 n - 1 。每位员工都有一位 喜欢 的员工
    每位员工 当且仅当 他被安排在喜欢员工的旁边，他才会参加会议
    每位员工喜欢的员工 不会 是他自己。给你一个下标从 0 开始的整数数组 favorite
    其中 favorite[i] 表示第 i 位员工喜欢的员工。请你返回参加会议的 最多员工数目
    测试链接 : 
    https://leetcode.cn/problems/maximum-employees-to-be-invited-to-a-meeting/

*/